home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 January / PCWorld_2007-01_cd.bin / v cisle / autoit / autoit-v3.2.0.1-setup.exe / Include / GuiEdit.au3 < prev    next >
Text File  |  2006-07-22  |  35KB  |  697 lines

  1. ; Include Version:1.66 (17 July 2006)
  2. #include-once
  3.  
  4. #include <EditConstants.au3> ; needed for _GuiCtrlEditFind
  5. #include <GuiStatusBar.au3> ; needed for _GuiCtrlEditFind
  6. #include <GUIConstantsEx.au3>
  7. #include <StaticConstants.au3>
  8. ; ------------------------------------------------------------------------------
  9. ;
  10. ; AutoIt Version: 3.1.1++
  11. ; Language:       English
  12. ; Description:    Functions that assist with Edit control.
  13. ;
  14. ; ------------------------------------------------------------------------------
  15.  
  16.  
  17. ; function list
  18. ;===============================================================================
  19. ; _GUICtrlEditCanUndo
  20. ; _GuiCtrlEditFind
  21. ; _GUICtrlEditEmptyUndoBuffer
  22. ; _GUICtrlEditGetFirstVisibleLine
  23. ; _GUICtrlEditGetLineCount
  24. ; _GUICtrlEditGetModify
  25. ; _GUICtrlEditGetRECT
  26. ; _GUICtrlEditGetSel
  27. ; _GUICtrlEditLineFromChar
  28. ; _GUICtrlEditLineIndex
  29. ; _GUICtrlEditLineLength
  30. ; _GUICtrlEditLineScroll
  31. ; _GUICtrlEditReplaceSel
  32. ; _GUICtrlEditScroll
  33. ; _GUICtrlEditSetModify
  34. ; _GUICtrlEditSetRECT
  35. ; _GUICtrlEditSetSel
  36. ; _GUICtrlEditUndo
  37. ;===============================================================================
  38. ; Helper Function(s)
  39. ; _GuiCtrlEditFindText
  40. ;===============================================================================
  41. ;
  42. ; Description:            _GUICtrlEditCanUndo
  43. ; Parameter(s):        $h_edit - controlID
  44. ; Requirement:            None
  45. ; Return Value(s):    If there are actions in the control's undo queue, the return value is nonzero.
  46. ;                            If the undo queue is empty, the return value is zero.
  47. ; User CallTip:        _GUICtrlEditCanUndo($h_edit) Determines whether there are any actions in an edit control's undo queue. (required: <GuiEdit.au3>)
  48. ; Author(s):            Gary Frost (custompcs at charter dot net)
  49. ; Note(s):                If the undo queue is not empty, you can call the _GUICtrlEditUndo
  50. ;                            to undo the most recent operation.
  51. ;
  52. ;===============================================================================
  53. Func _GUICtrlEditCanUndo($h_edit)
  54.    If IsHWnd($h_edit) Then
  55.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_edit, "int", $EM_CANUNDO, "int", 0, "int", 0)
  56.       Return $a_ret[0]
  57.    Else
  58.       Return GUICtrlSendMsg($h_edit, $EM_CANUNDO, 0, 0)
  59.    EndIf
  60. EndFunc   ;==>_GUICtrlEditCanUndo
  61.  
  62. ;===============================================================================
  63. ;
  64. ; Description:            _GuiCtrlEditFind
  65. ; Parameter(s):        $h_gui - GUI ID/Window Handle (Handle only be used with external controls)
  66. ;                            $h_edit - control ID/Control Handle (Handle only be used with external controls)
  67. ;                            $b_replace - Optional: Boolean True/False show replace option (Default is False)
  68. ;                            $s_WinTitle - Optional: Window Title (should only be used with external controls)
  69. ;                            $s_WinText - Optional: Window Text (should only be used with external controls)
  70. ; Requirement:            $ES_NOHIDESEL style should be used with edit control
  71. ; Return Value(s):    None
  72. ; User CallTip:        _GuiCtrlEditFind(ByRef $h_gui, ByRef $h_edit[, $b_replace = False[, $s_WinTitle = ""[, $s_WinText = ""]]]) Find/Replace text in an Edit control. (required: <GuiEdit.au3>)
  73. ; Author(s):            Gary Frost (custompcs at charter dot net)
  74. ; Note(s):                Be careful using the $s_WinText
  75. ;                    if you use text from the edit control and that text gets replaced
  76. ;                    the function will no longer function correctly
  77. ;
  78. ;===============================================================================
  79. Func _GuiCtrlEditFind(ByRef $h_gui, ByRef $h_edit, $b_replace = False, $s_WinTitle = "", $s_WinText = "")
  80.    Local $gui_Search, $Input_Search, $Input_Replace, $lbl_replace, $msg_find
  81.    Local $pos = 0, $case, $occurance = 0, $Replacements = 0
  82.    Local $chk_wholeonly, $chk_matchcase, $btn_FindNext, $btn_replace, $btn_close, $StatusBar1
  83.     Local $s_text, $a_sel
  84.     Local $a_PartsRightEdge[3] = [125, 225, -1]
  85.     Local $a_PartsText[3] = ["", "", ""], $t_pos
  86.     If $s_WinTitle <> "" Then
  87.         $s_text = ControlGetText($s_WinTitle,$s_WinText,$h_edit)
  88.         $a_sel = _GUICtrlEditGetSel ($h_edit)
  89.     Else
  90.         $s_text = GUICtrlRead($h_edit)
  91.         $a_sel = _GUICtrlEditGetSel ($h_edit)
  92.     EndIf
  93.    
  94.    $gui_Search = GUICreate("Find", 349, 177, -1, -1, BitOR($WS_CHILD, $WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU), -1, $h_gui)
  95.     $StatusBar1 = _GuiCtrlStatusBarCreate ($gui_Search, $a_PartsRightEdge, $a_PartsText)
  96.    _GuiCtrlStatusBarSetText ($StatusBar1, "Find: ", 0)
  97.     
  98.    GUISetIcon(@SystemDir & "\shell32.dll", 22, $gui_Search)
  99.    GUICtrlCreateLabel("Find what:", 9, 10, 53, 16, $SS_CENTER)
  100.    $Input_Search = GUICtrlCreateInput("", 80, 8, 257, 21)
  101.    If (IsArray($a_sel) And $a_sel <> $EC_ERR) Then
  102.       GUICtrlSetData($Input_Search, StringMid($s_text, $a_sel[1] + 1, $a_sel[2] - $a_sel[1]))
  103.         If $a_sel[1] <> $a_sel[2] Then ; text was selected when function was invoked
  104.             $pos = $a_sel[1]
  105.             If BitAND(GUICtrlRead($chk_matchcase), $GUI_CHECKED) = $GUI_CHECKED Then $case = 1
  106.             $occurance = 1
  107.             While 1 ; set the current occurance so search starts from here
  108.                 $t_pos = StringInStr($s_text, GUICtrlRead($Input_Search), $case, $occurance)
  109.                 If Not $t_pos Then ; this should never happen, but just in case
  110.                     $occurance = 0
  111.                     ExitLoop
  112.                 ElseIf $t_pos = $pos + 1 Then ; found the occurance
  113.                     ExitLoop
  114.                 EndIf
  115.                 $occurance += 1
  116.             WEnd
  117.         EndIf
  118.         _GuiCtrlStatusBarSetText ($StatusBar1, "Find: " & GUICtrlRead($Input_Search), 0)
  119.    EndIf
  120.    $lbl_replace = GUICtrlCreateLabel("Replace with:", 9, 42, 69, 17, $SS_CENTER)
  121.    $Input_Replace = GUICtrlCreateInput("", 80, 40, 257, 21)
  122.    $chk_wholeonly = GUICtrlCreateCheckbox("Match whole word only", 9, 72, 145, 17)
  123.    $chk_matchcase = GUICtrlCreateCheckbox("Match case", 9, 96, 145, 17)
  124.    $btn_FindNext = GUICtrlCreateButton("Find Next", 168, 72, 161, 21, 0)
  125.    $btn_replace = GUICtrlCreateButton("Replace", 168, 96, 161, 21, 0)
  126.    $btn_close = GUICtrlCreateButton("Close", 104, 130, 161, 21, 0)
  127.     
  128.    If $b_replace = False Then
  129.       GUICtrlSetState($lbl_replace, $GUI_HIDE)
  130.       GUICtrlSetState($Input_Replace, $GUI_HIDE)
  131.       GUICtrlSetState($btn_replace, $GUI_HIDE)
  132.     Else
  133.         _GuiCtrlStatusBarSetText ($StatusBar1, "Replacements: " & $Replacements, 1)
  134.         _GuiCtrlStatusBarSetText ($StatusBar1, "With: ", 2)
  135.    EndIf
  136.    GUISetState(@SW_SHOW)
  137.    
  138.    While 1
  139.       $msg_find = GUIGetMsg()
  140.       Select
  141.          Case $msg_find = $GUI_EVENT_CLOSE Or $msg_find = $btn_close
  142.             ExitLoop
  143.          Case $msg_find = $btn_FindNext
  144.                 GUICtrlSetState($btn_FindNext, $GUI_DISABLE)
  145.                 GUICtrlSetCursor($btn_FindNext,15)
  146.                 Sleep ( 100 )
  147.                 _GuiCtrlStatusBarSetText ($StatusBar1, "Find: " & GUICtrlRead($Input_Search), 0)
  148.                 If $b_replace = True Then 
  149.                     _GuiCtrlStatusBarSetText ($StatusBar1, "Find: " & GUICtrlRead($Input_Search), 0)
  150.                     _GuiCtrlStatusBarSetText ($StatusBar1, "With: " & GUICtrlRead($Input_Replace), 2)
  151.                 EndIf
  152.             _GuiCtrlEditFindText($h_edit, $Input_Search, $chk_matchcase, $chk_wholeonly, $pos, $occurance, $Replacements, $s_WinTitle, $s_WinText)
  153.                 Sleep ( 100 )
  154.                 GUICtrlSetState($btn_FindNext, $GUI_ENABLE)
  155.                 GUICtrlSetCursor($btn_FindNext,2)
  156.          Case $msg_find = $btn_replace
  157.                 GUICtrlSetState($btn_replace, $GUI_DISABLE)
  158.                 GUICtrlSetCursor($btn_replace,15)
  159.                 Sleep ( 100 )
  160.                 _GuiCtrlStatusBarSetText ($StatusBar1, "Find: " & GUICtrlRead($Input_Search), 0)
  161.                 _GuiCtrlStatusBarSetText ($StatusBar1, "With: " & GUICtrlRead($Input_Replace), 2)
  162.             If $pos Then
  163.                _GUICtrlEditReplaceSel ($h_edit, True, GUICtrlRead($Input_Replace))
  164.                     $Replacements += 1
  165.                     $occurance -= 1
  166.                     _GuiCtrlStatusBarSetText ($StatusBar1, "Replacements: " & $Replacements, 1)
  167.                 EndIf
  168.                 _GuiCtrlEditFindText($h_edit, $Input_Search, $chk_matchcase, $chk_wholeonly, $pos, $occurance, $Replacements, $s_WinTitle, $s_WinText)
  169.                 Sleep ( 100 )
  170.                 GUICtrlSetState($btn_replace, $GUI_ENABLE)
  171.                 GUICtrlSetCursor($btn_replace,2)
  172.       EndSelect
  173.    WEnd
  174.    GUIDelete($gui_Search)
  175. EndFunc   ;==>_GuiCtrlEditFind
  176.  
  177. ;===============================================================================
  178. ;
  179. ; Description:            _GuiCtrlEditFindText
  180. ; Parameter(s):        $h_edit - controlID
  181. ;                            $Input_Search - controlID
  182. ;                            $chk_matchcase - controlID
  183. ;                            $chk_wholeonly - controlID
  184. ;                            $pos - position of text found
  185. ;                            $occurance - occurance to find
  186. ;                            $Replacements - # of occurances replaced
  187. ;                            $s_WinTitle - Optional: Window Title
  188. ;                            $s_WinText - Optional: Window Text
  189. ; Requirement:            _GuiCtrlEditFind function
  190. ; Return Value(s):    None
  191. ; User CallTip:        
  192. ; Author(s):            Gary Frost (custompcs at charter dot net)
  193. ; Note(s):                
  194. ;
  195. ;===============================================================================
  196. Func _GuiCtrlEditFindText(ByRef $h_edit, ByRef $Input_Search, ByRef $chk_matchcase, ByRef $chk_wholeonly, ByRef $pos, ByRef $occurance, ByRef $Replacements, $s_WinTitle = "", $s_WinText = "")
  197.    Local $case = 0, $whole = 0
  198.    Local $s_text, $exact = False
  199.    Local $s_find = GUICtrlRead($Input_Search)
  200.     If $s_WinTitle <> "" Then
  201.         $s_text = ControlGetText($s_WinTitle,$s_WinText,$h_edit)
  202.     Else
  203.         $s_text = GUICtrlRead($h_edit)
  204.     EndIf
  205.    
  206.    If BitAND(GUICtrlRead($chk_matchcase), $GUI_CHECKED) = $GUI_CHECKED Then $case = 1
  207.    If BitAND(GUICtrlRead($chk_wholeonly), $GUI_CHECKED) = $GUI_CHECKED Then $whole = 1
  208.    If $s_find <> "" Then
  209.       $occurance += 1
  210.       $pos = StringInStr($s_text, $s_find, $case, $occurance)
  211.       If $whole And $pos Then
  212.             Local $c_compare2 = StringMid($s_text, $pos + StringLen($s_find), 1)
  213.             If $pos = 1 Then 
  214.                 If ($pos + StringLen($s_find)) - 1 = StringLen($s_text) Or _
  215.                     ($c_compare2 = " " Or $c_compare2 = @LF Or $c_compare2 = @CR Or _
  216.                     $c_compare2 = @CRLF Or $c_compare2 = @TAB) Then $exact = True
  217.             Else
  218.                 Local $c_compare1 = StringMid($s_text, $pos - 1, 1)
  219.                 If ($pos + StringLen($s_find)) - 1 = StringLen($s_text) Then 
  220.                     If ($c_compare1 = " " Or $c_compare1 = @LF Or $c_compare1 = @CR Or _
  221.                         $c_compare1 = @CRLF Or $c_compare1 = @TAB) Then $exact = True
  222.                 Else
  223.                     If ($c_compare1 = " " Or $c_compare1 = @LF Or $c_compare1 = @CR Or _
  224.                         $c_compare1 = @CRLF Or $c_compare1 = @TAB) And _
  225.                         ($c_compare2 = " " Or $c_compare2 = @LF Or $c_compare2 = @CR Or _
  226.                         $c_compare2 = @CRLF Or $c_compare2 = @TAB) Then $exact = True
  227.                 EndIf
  228.          EndIf
  229.          If $exact = False Then ; found word, but as part of another word, so search again
  230.             _GuiCtrlEditFindText($h_edit, $Input_Search, $chk_matchcase, $chk_wholeonly, $pos, $occurance, $Replacements, $s_WinTitle, $s_WinText)
  231.          Else ; found it
  232.             _GUICtrlEditSetSel ($h_edit, $pos - 1, ($pos + StringLen($s_find)) - 1)
  233.                 _GUICtrlEditScroll($h_edit, $SB_SCROLLCARET)
  234.          EndIf
  235.         ElseIf $whole And Not $pos Then ; no more to find
  236.             $occurance = 0
  237.             MsgBox(48,"Find","Reached End of document, Can not find the string '" & $s_find & "'")
  238.       ElseIf Not $whole Then
  239.          If Not $pos Then ; wrap around search and select
  240.             $occurance = 1
  241.             _GUICtrlEditSetSel ($h_edit, -1, 0)
  242.                 _GUICtrlEditScroll($h_edit, $SB_SCROLLCARET)
  243.             $pos = StringInStr($s_text, $s_find, $case, $occurance)
  244.             If Not $pos Then ; no more to find
  245.                $occurance = 0
  246.                     MsgBox(48,"Find","Reached End of document, Can not find the string  '" & $s_find & "'")
  247.             Else ; found it
  248.                _GUICtrlEditSetSel ($h_edit, $pos - 1, ($pos + StringLen($s_find)) - 1)
  249.                     _GUICtrlEditScroll($h_edit, $SB_SCROLLCARET)
  250.             EndIf
  251.          Else ; set selection
  252.             _GUICtrlEditSetSel ($h_edit, $pos - 1, ($pos + StringLen($s_find)) - 1)
  253.                 _GUICtrlEditScroll($h_edit, $SB_SCROLLCARET)
  254.          EndIf
  255.       EndIf
  256.    EndIf
  257. EndFunc   ;==>_GuiCtrlEditFindText
  258.  
  259. ;===============================================================================
  260. ;
  261. ; Description:            _GUICtrlEditEmptyUndoBuffer
  262. ; Parameter(s):        $h_edit - controlID
  263. ; Requirement:            None
  264. ; Return Value(s):    None
  265. ; User CallTip:        _GUICtrlEditEmptyUndoBuffer($h_edit) Resets the undo flag of an edit control. (required: <GuiEdit.au3>)
  266. ; Author(s):            Gary Frost (custompcs at charter dot net)
  267. ; Note(s):                The undo flag is automatically reset whenever the edit control receives a WM_SETTEXT or EM_SETHANDLE message.
  268. ;                            The control can only undo or redo the most recent operation.
  269. ;
  270. ;===============================================================================
  271. Func _GUICtrlEditEmptyUndoBuffer($h_edit)
  272.    If IsHWnd($h_edit) Then
  273.       DllCall("user32.dll", "none", "SendMessage", "hwnd", $h_edit, "int", $EM_EMPTYUNDOBUFFER, "int", 0, "int", 0)
  274.    Else
  275.       GUICtrlSendMsg($h_edit, $EM_EMPTYUNDOBUFFER, 0, 0)
  276.    EndIf
  277. EndFunc   ;==>_GUICtrlEditEmptyUndoBuffer
  278.  
  279. ;===============================================================================
  280. ;
  281. ; Description:            _GUICtrlEditGetFirstVisibleLine
  282. ; Parameter(s):        $h_edit - controlID
  283. ; Requirement:            None
  284. ; Return Value(s):    The return value is the zero-based index of the uppermost visible line in a multiline edit control.
  285. ;                            For single-line edit controls, the return value is the zero-based index of the first visible character.
  286. ; User CallTip:        _GUICtrlEditGetFirstVisibleLine($h_edit) Retrieves the zero-based index of the uppermost visible line in a multiline edit control. (required: <GuiEdit.au3>)
  287. ; Author(s):            Gary Frost (custompcs at charter dot net)
  288. ; Note(s):                The number of lines and the length of the lines in an edit control
  289. ;                            depend on the width of the control and the current Wordwrap setting.
  290. ;
  291. ;===============================================================================
  292. Func _GUICtrlEditGetFirstVisibleLine($h_edit)
  293.    If IsHWnd($h_edit) Then
  294.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_edit, "int", $EM_GETFIRSTVISIBLELINE, "int", 0, "int", 0)
  295.       Return $a_ret[0]
  296.    Else
  297.       Return GUICtrlSendMsg($h_edit, $EM_GETFIRSTVISIBLELINE, 0, 0)
  298.    EndIf
  299. EndFunc   ;==>_GUICtrlEditGetFirstVisibleLine
  300.  
  301. ;===============================================================================
  302. ;
  303. ; Description:            _GUICtrlEditGetLineCount
  304. ; Parameter(s):        $h_edit - controlID
  305. ; Requirement:            None
  306. ; Return Value(s):    The return value is an integer specifying the total number of text lines in the multiline edit control.
  307. ; User CallTip:        _GUICtrlEditGetLineCount($h_edit) Retrieves the number of lines in a multiline edit control. (required: <GuiEdit.au3>)
  308. ; Author(s):            Gary Frost (custompcs at charter dot net)
  309. ; Note(s):                If the control has no text, the return value is 1.
  310. ;                            The return value will never be less than 1.
  311. ;
  312. ;                            The _GUICtrlEditGetLineCount retrieves the total number of text lines,
  313. ;                            not just the number of lines that are currently visible.
  314. ;
  315. ;                            If the Wordwrap feature is enabled, the number of lines can change when the dimensions of the editing window change.
  316. ;
  317. ;===============================================================================
  318. Func _GUICtrlEditGetLineCount($h_edit)
  319.    If IsHWnd($h_edit) Then
  320.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_edit, "int", $EM_GETLINECOUNT, "int", 0, "int", 0)
  321.       Return $a_ret[0]
  322.    Else
  323.       Return GUICtrlSendMsg($h_edit, $EM_GETLINECOUNT, 0, 0)
  324.    EndIf
  325. EndFunc   ;==>_GUICtrlEditGetLineCount
  326.  
  327. ;===============================================================================
  328. ;
  329. ; Description:            _GUICtrlEditGetModify
  330. ; Parameter(s):        $h_edit - controlID
  331. ; Requirement:            None
  332. ; Return Value(s):    If the contents of edit control have been modified, the return value is nonzero
  333. ;                            otherwise, it is zero.
  334. ; User CallTip:        _GUICtrlEditGetModify($h_edit) Retrieves the state of an edit control's modification flag. (required: <GuiEdit.au3>)
  335. ; Author(s):            Gary Frost (custompcs at charter dot net)
  336. ; Note(s):                The system automatically clears the modification flag to zero when the control is created.
  337. ;                            If the user changes the control's text, the system sets the flag to nonzero.
  338. ;                            You can call _GUICtrlEditSetModify to set or clear the flag.
  339. ;
  340. ;===============================================================================
  341. Func _GUICtrlEditGetModify($h_edit)
  342.    If IsHWnd($h_edit) Then
  343.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_edit, "int", $EM_GETMODIFY, "int", 0, "int", 0)
  344.       Return $a_ret[0]
  345.    Else
  346.       Return GUICtrlSendMsg($h_edit, $EM_GETMODIFY, 0, 0)
  347.    EndIf
  348. EndFunc   ;==>_GUICtrlEditGetModify
  349.  
  350. ;===============================================================================
  351. ;
  352. ; Description:            _GUICtrlEditGetRECT
  353. ; Parameter(s):        $h_edit - controlID
  354. ; Requirement:            None
  355. ; Return Value(s):    Array containing the RECT, first element ($array[0]) contains the number of elements
  356. ;                            If an error occurs, the return value is $EC_ERR.
  357. ; User CallTip:        _GUICtrlEditGetRECT($h_edit) Retrieves the formatting rectangle of an edit control. (required: <GuiEdit.au3>)
  358. ; Author(s):            Gary Frost (custompcs at charter dot net)
  359. ; Note(s):                You can modify the formatting rectangle of a multiline edit control by using the
  360. ;                            _GUICtrlEditSetRECT.
  361. ;
  362. ;                            Under certain conditions, _GUICtrlEditGetRECT might not return the exact values that
  363. ;                            _GUICtrlEditSetRECT setùit will be approximately correct,
  364. ;                            but it can be off by a few pixels.
  365. ;
  366. ;===============================================================================
  367. Func _GUICtrlEditGetRECT($h_edit)
  368.    #cs
  369.       typedef struct _RECT {
  370.       LONG left;
  371.       LONG top;
  372.       LONG right;
  373.       LONG bottom;
  374.       } RECT, *PRECT;
  375.    #ce
  376.    Local $RECT = "int;int;int;int"
  377.    Local $left = 1, $top = 2, $right = 3, $bottom = 4
  378.    Local $p = DllStructCreate($RECT)
  379.    If @error Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR)
  380.    If IsHWnd($h_edit) Then
  381.       DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_edit, "int", $EM_GETRECT, "int", 0, "ptr", DllStructGetPtr($p))
  382.    Else
  383.       GUICtrlSendMsg($h_edit, $EM_GETRECT, 0, DllStructGetPtr($p))
  384.    EndIf
  385.    Return StringSplit(DllStructGetData($p, $left) & "," & _
  386.          DllStructGetData($p, $top) & "," & _ 
  387.          DllStructGetData($p, $right) & "," & _ 
  388.          DllStructGetData($p, $bottom), ",")
  389. EndFunc   ;==>_GUICtrlEditGetRECT
  390.  
  391. ;===============================================================================
  392. ;
  393. ; Description:            _GUICtrlEditGetSel
  394. ; Parameter(s):        $h_edit - controlID
  395. ; Requirement:            None
  396. ; Return Value(s):    Array containing the starting and ending selected positions, first element ($array[0]) contains the number of elements
  397. ;                            If an error occurs, the return value is $EC_ERR.
  398. ; User CallTip:        _GUICtrlEditGetSel($h_edit) Retrieves the starting and ending character positions of the current selection in an edit control. (required: <GuiEdit.au3>)
  399. ; Author(s):            Gary Frost (custompcs at charter dot net)
  400. ; Note(s):                $array[1] contains the starting position
  401. ;                            $array[2] contains the ending position
  402. ;
  403. ;===============================================================================
  404. Func _GUICtrlEditGetSel($h_edit)
  405.    Local $ptr1 = "int", $ptr2 = "int"
  406.    Local $wparam = DllStructCreate($ptr1)
  407.    Local $a_sel
  408.    If @error Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR)
  409.    Local $lparam = DllStructCreate($ptr2)
  410.    If @error Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR)
  411.    If IsHWnd($h_edit) Then
  412.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_edit, "int", $EM_GETSEL, "ptr", DllStructGetPtr($wparam), "ptr", DllStructGetPtr($lparam))
  413.       If ($a_ret[0] == -1) Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR)
  414.    Else
  415.       Local $i_ret = GUICtrlSendMsg($h_edit, $EM_GETSEL, DllStructGetPtr($wparam), DllStructGetPtr($lparam))
  416.       If ($i_ret == -1) Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR)
  417.    EndIf
  418.    $a_sel = StringSplit(DllStructGetData($wparam, 1) & "," & DllStructGetData($lparam, 1), ",")
  419.    Return $a_sel
  420. EndFunc   ;==>_GUICtrlEditGetSel
  421.  
  422. ;===============================================================================
  423. ;
  424. ; Description:            _GUICtrlEditLineFromChar
  425. ; Parameter(s):        $h_edit - controlID
  426. ;                            $i_index - Optional: Specifies the character index of the character contained in the line whose number is to be retrieved.
  427. ; Requirement:            None
  428. ; Return Value(s):    The return value is the zero-based line number of the line containing the character index specified by $i_index.
  429. ; User CallTip:        _GUICtrlEditLineFromChar($h_edit[, $i_index = -1]) Retrieves the index of the line that contains the specified character index in a multiline edit control. (required: <GuiEdit.au3>)
  430. ; Author(s):            Gary Frost (custompcs at charter dot net)
  431. ; Note(s):                If $i_index is û1, _GUICtrlEditLineFromChar retrieves either the line number of the current line
  432. ;                            (the line containing the caret) or, if there is a selection, the line number of the line containing
  433. ;                            the beginning of the selection.
  434. ;
  435. ;===============================================================================
  436. Func _GUICtrlEditLineFromChar($h_edit, $i_index = -1)
  437.    If IsHWnd($h_edit) Then
  438.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_edit, "int", $EM_LINEFROMCHAR, "int", $i_index, "int", 0)
  439.       Return $a_ret[0]
  440.    Else
  441.       Return GUICtrlSendMsg($h_edit, $EM_LINEFROMCHAR, $i_index, 0)
  442.    EndIf
  443. EndFunc   ;==>_GUICtrlEditLineFromChar
  444.  
  445. ;===============================================================================
  446. ;
  447. ; Description:            _GUICtrlEditLineIndex
  448. ; Parameter(s):        $h_edit - controlID
  449. ;                            $i_line - Optional: Specifies the zero-based line number.
  450. ;                                        A value of û1 specifies the current line number (the line that contains the caret).
  451. ; Requirement:            None
  452. ; Return Value(s):    The return value is the character index of the line specified in the wParam parameter,
  453. ;                            or it is $EC_ERR if the specified line number is greater than the number of lines in the edit control.
  454. ; User CallTip:        _GUICtrlEditLineIndex($h_edit[, $i_line = -1]) Retrieves the character index of the first character of a specified line in a multiline edit control. (required: <GuiEdit.au3>)
  455. ; Author(s):            Gary Frost (custompcs at charter dot net)
  456. ; Note(s):
  457. ;
  458. ;===============================================================================
  459. Func _GUICtrlEditLineIndex($h_edit, $i_line = -1)
  460.    If IsHWnd($h_edit) Then
  461.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_edit, "int", $EM_LINEINDEX, "int", $i_line, "int", 0)
  462.       Return $a_ret[0]
  463.    Else
  464.       Return GUICtrlSendMsg($h_edit, $EM_LINEINDEX, $i_line, 0)
  465.    EndIf
  466. EndFunc   ;==>_GUICtrlEditLineIndex
  467.  
  468. ;===============================================================================
  469. ;
  470. ; Description:            _GUICtrlEditLineLength
  471. ; Parameter(s):        $h_edit - controlID
  472. ;                            $i_index - Optional: Specifies the character index of a character in the line whose length is to be retrieved.
  473. ; Requirement:            None
  474. ; Return Value(s):    For multiline edit controls, the return value is the length, in TCHARs, of the line specified by the $i_index parameter.
  475. ;                            For single-line edit controls, the return value is the length, in TCHARs, of the text in the edit control.
  476. ; User CallTip:        _GUICtrlEditLineLength($h_edit[, $i_index = -1]) Retrieves the length, in characters, of a line in an edit control. (required: <GuiEdit.au3>)
  477. ; Author(s):            Gary Frost (custompcs at charter dot net)
  478. ; Note(s):                $i_index
  479. ;                                For ANSI text, this is the number of bytes
  480. ;                                For Unicode text, this is the number of characters.
  481. ;                                It does not include the carriage-return character at the end of the line.
  482. ;                                If $i_index is greater than the number of characters in the control, the return value is zero.
  483. ;
  484. ;===============================================================================
  485. Func _GUICtrlEditLineLength($h_edit, $i_index = -1)
  486.    If IsHWnd($h_edit) Then
  487.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_edit, "int", $EM_LINELENGTH, "int", $i_index, "int", 0)
  488.       Return $a_ret[0]
  489.    Else
  490.       Return GUICtrlSendMsg($h_edit, $EM_LINELENGTH, $i_index, 0)
  491.    EndIf
  492. EndFunc   ;==>_GUICtrlEditLineLength
  493.  
  494. ;===============================================================================
  495. ;
  496. ; Description:            _GUICtrlEditLineScroll
  497. ; Parameter(s):        $h_edit - controlID
  498. ;                            $i_horiz - Specifies the number of characters to scroll horizontally.
  499. ;                            $i_vert - Specifies the number of lines to scroll vertically.
  500. ; Requirement:            None
  501. ; Return Value(s):    If the message is sent to a multiline edit control, the return value is TRUE.
  502. ;                            If the message is sent to a single-line edit control, the return value is FALSE.
  503. ; User CallTip:        _GUICtrlEditLineScroll($h_edit, $i_horiz, $i_vert) Scrolls the text in a multiline edit control. (required: <GuiEdit.au3>)
  504. ; Author(s):            Gary Frost (custompcs at charter dot net)
  505. ; Note(s):                The control does not scroll vertically past the last line of text in the edit control.
  506. ;                            If the current line plus the number of lines specified by the $i_vert parameter exceeds the total number of lines in the edit control,
  507. ;                            the value is adjusted so that the last line of the edit control is scrolled to the top of the edit-control window.
  508. ;
  509. ;                            _GUICtrlEditLineScroll scrolls the text vertically or horizontally in a multiline edit control.
  510. ;                            _GUICtrlEditLineScroll can be used to scroll horizontally past the last character of any line.
  511. ;
  512. ;===============================================================================
  513. Func _GUICtrlEditLineScroll($h_edit, $i_horiz, $i_vert)
  514.    If IsHWnd($h_edit) Then
  515.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_edit, "int", $EM_LINESCROLL, "int", $i_horiz, "int", $i_vert)
  516.       Return $a_ret[0]
  517.    Else
  518.       Return GUICtrlSendMsg($h_edit, $EM_LINESCROLL, $i_horiz, $i_vert)
  519.    EndIf
  520. EndFunc   ;==>_GUICtrlEditLineScroll
  521.  
  522. ;===============================================================================
  523. ;
  524. ; Description:            _GUICtrlEditReplaceSel
  525. ; Parameter(s):        $h_edit - controlID
  526. ;                    $i_bool - Specifies whether the replacement operation can be undone.
  527. ;                                        If this is TRUE, the operation can be undone.
  528. ;                                        If this is FALSE , the operation cannot be undone.
  529. ;                            $s_text - String containing the replacement text.
  530. ; Requirement:            None
  531. ; Return Value(s):    None
  532. ; User CallTip:        _GUICtrlEditReplaceSel($h_edit, $i_bool, $s_text) Replaces the current selection in an edit control with the specified text. (required: <GuiEdit.au3>)
  533. ; Author(s):            Gary Frost (custompcs at charter dot net)
  534. ; Note(s):                Use the _GUICtrlEditReplaceSel to replace only a portion of the text in an edit control.
  535. ;                            If there is no current selection, the replacement text is inserted at the current location of the caret.
  536. ;
  537. ;===============================================================================
  538. Func _GUICtrlEditReplaceSel($h_edit, $i_bool, $s_text)
  539.    If IsHWnd($h_edit) Then
  540.       DllCall("user32.dll", "none", "SendMessage", "hwnd", $h_edit, "int", $EM_REPLACESEL, "int", $i_bool, "str", $s_text)
  541.    Else
  542.       GUICtrlSendMsg($h_edit, $EM_REPLACESEL, $i_bool, $s_text)
  543.    EndIf
  544. EndFunc   ;==>_GUICtrlEditReplaceSel
  545.  
  546. ;===============================================================================
  547. ;
  548. ; Description:            _GUICtrlEditScroll
  549. ; Parameter(s):        $h_edit - controlID
  550. ;                            $i_direct - Specifies the action the scroll bar is to take.
  551. ; Requirement:            None
  552. ; Return Value(s):    If successful, the high-order word of the return value is TRUE, and the low-order word is the number of lines that the command scrolls.
  553. ;                            If the $i_direct parameter specifies an invalid value, the return value is FALSE.
  554. ; User CallTip:        _GUICtrlEditScroll($h_edit, $i_direct) Scrolls the text vertically in a multiline edit control. (required: <GuiEdit.au3>)
  555. ; Author(s):            Gary Frost (custompcs at charter dot net)
  556. ; Note(s):                $i_direct
  557. ;                                This parameter can be one of the following values.
  558. ;                                    $SB_LINEDOWN
  559. ;                                        Scrolls down one line.
  560. ;                                    $SB_LINEUP
  561. ;                                        Scrolls up one line.
  562. ;                                    $SB_PAGEDOWN
  563. ;                                        Scrolls down one page.
  564. ;                                    $SB_PAGEUP
  565. ;                                        Scrolls up one page.
  566. ;                                    $SB_SCROLLCARET
  567. ;                                        Scrolls the caret into view
  568. ;
  569. ;                            To scroll to a specific line or character position, use the _GUICtrlEditLineSscroll.
  570. ;
  571. ;===============================================================================
  572. Func _GUICtrlEditScroll($h_edit, $i_direct)
  573.    If IsHWnd($h_edit) Then
  574.       Local $a_ret
  575.       If $i_direct == $SB_SCROLLCARET Then
  576.          $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_edit, "int", $EM_SCROLLCARET, "int", 0, "int", 0)
  577.       Else
  578.          $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_edit, "int", $EM_SCROLL, "int", $i_direct, "int", 0)
  579.       EndIf
  580.       Return $a_ret[0]
  581.    Else
  582.       If $i_direct == $SB_SCROLLCARET Then
  583.          Return GUICtrlSendMsg($h_edit, $EM_SCROLLCARET, 0, 0)
  584.       Else
  585.          Return GUICtrlSendMsg($h_edit, $EM_SCROLL, $i_direct, 0)
  586.       EndIf
  587.    EndIf
  588. EndFunc   ;==>_GUICtrlEditScroll
  589.  
  590. ;===============================================================================
  591. ;
  592. ; Description:            _GUICtrlEditSetModify
  593. ; Parameter(s):        $h_edit - controlID
  594. ;                            $i_bool - Specifies the new value for the modification flag.
  595. ;                                        A value of TRUE indicates the text has been modified.
  596. ;                                        A value of FALSE indicates it has not been modified.
  597. ; Requirement:            None
  598. ; Return Value(s):    None
  599. ; User CallTip:        _GUICtrlEditSetModify($h_edit, $i_bool) Sets or clears the modification flag for an edit control. (required: <GuiEdit.au3>)
  600. ; Author(s):            Gary Frost (custompcs at charter dot net)
  601. ; Note(s):                The system automatically clears the modification flag to zero when the control is created.
  602. ;                            If the user changes the control's text, the system sets the flag to nonzero.
  603. ;                            You can use the _GUICtrlEditGetModify to retrieve the current state of the flag.
  604. ;
  605. ;===============================================================================
  606. Func _GUICtrlEditSetModify($h_edit, $i_bool)
  607.    If IsHWnd($h_edit) Then
  608.       DllCall("user32.dll", "none", "SendMessage", "hwnd", $h_edit, "int", $EM_SETMODIFY, "int", $i_bool, "int", 0)
  609.    Else
  610.       GUICtrlSendMsg($h_edit, $EM_SETMODIFY, $i_bool, 0)
  611.    EndIf
  612. EndFunc   ;==>_GUICtrlEditSetModify
  613.  
  614. ;===============================================================================
  615. ;
  616. ; Description:            _GUICtrlEditSetRECT
  617. ; Parameter(s):        $h_edit - controlID
  618. ;                            $left - Specifies the x-coordinate of the upper-left corner of the rectangle.
  619. ;                            $top - Specifies the y-coordinate of the upper-left corner of the rectangle.
  620. ;                            $right - Specifies the x-coordinate of the lower-right corner of the rectangle.
  621. ;                            $bottom - Specifies the y-coordinate of the lower-right corner of the rectangle.
  622. ; Requirement:            None
  623. ; Return Value(s):    None
  624. ; User CallTip:        _GUICtrlEditSetRECT(Byref $h_edit, $left, $top, $right, $bottom) Sets the formatting rectangle of an edit control. (required: <GuiEdit.au3>)
  625. ; Author(s):            Gary Frost (custompcs at charter dot net)
  626. ; Note(s):
  627. ;
  628. ;===============================================================================
  629. Func _GuiCtrlEditSetRect(ByRef $h_edit, $left, $top, $right, $bottom)
  630.     Local Const $EM_SETRECT = 0xB3
  631.     Local $struct = DllStructCreate("int;int;int;int")
  632.     DllStructSetData($struct, 1, $left)
  633.     DllStructSetData($struct, 2, $top)
  634.     DllStructSetData($struct, 3, $right + 1)
  635.     DllStructSetData($struct, 4, $bottom + 10)
  636.     If IsHWnd($h_edit) Then
  637.         DllCall("user32.dll", "none", "SendMessage", "hwnd", $h_edit, "int", $EM_SETRECT, "int", 0, "ptr", DllStructGetPtr($struct))
  638.     Else
  639.         GUICtrlSendMsg($h_edit, $EM_SETRECT, 0, DllStructGetPtr($struct))
  640.     EndIf
  641. EndFunc   ;==>_GuiCtrlEditSetRect
  642.  
  643. ;===============================================================================
  644. ;
  645. ; Description:            _GUICtrlEditSetSel
  646. ; Parameter(s):        $h_edit - controlID
  647. ;                            $i_start - Specifies the starting character position of the selection.
  648. ;                            $i_end - Specifies the ending character position of the selection.
  649. ; Requirement:            None
  650. ; Return Value(s):    None
  651. ; User CallTip:        _GUICtrlEditSetSel($h_edit, $i_start, $i_end) Selects a range of characters in an edit control. (required: <GuiEdit.au3>)
  652. ; Author(s):            Gary Frost (custompcs at charter dot net)
  653. ; Note(s):                The start value can be greater than the end value.
  654. ;                            The lower of the two values specifies the character position of the first character in the selection.
  655. ;                            The higher value specifies the position of the first character beyond the selection.
  656. ;
  657. ;                            The start value is the anchor point of the selection, and the end value is the active end.
  658. ;                            If the user uses the SHIFT key to adjust the size of the selection, the active end can move but the anchor point remains the same.
  659. ;
  660. ;                            If the $i_start is 0 and the $i_end is û1, all the text in the edit control is selected.
  661. ;                            If the $i_start is û1, any current selection is deselected.
  662. ;
  663. ;                            The control displays a flashing caret at the $i_end position regardless of the relative values of $i_start and $i_end.
  664. ;
  665. ;===============================================================================
  666. Func _GUICtrlEditSetSel($h_edit, $i_start, $i_end)
  667.    If IsHWnd($h_edit) Then
  668.       DllCall("user32.dll", "none", "SendMessage", "hwnd", $h_edit, "int", $EM_SETSEL, "int", $i_start, "int", $i_end)
  669.    Else
  670.       GUICtrlSendMsg($h_edit, $EM_SETSEL, $i_start, $i_end)
  671.    EndIf
  672. EndFunc   ;==>_GUICtrlEditSetSel
  673.  
  674. ;===============================================================================
  675. ;
  676. ; Description:            _GUICtrlEditUndo
  677. ; Parameter(s):        $h_edit - controlID
  678. ; Requirement:            None
  679. ; Return Value(s):    For a single-line edit control, the return value is always TRUE.
  680. ;                            For a multiline edit control, the return value is TRUE if the undo operation is successful,
  681. ;                            or FALSE if the undo operation fails.
  682. ; User CallTip:        _GUICtrlEditUndo($h_edit) Undoes the last edit control operation in the control's undo queue. (required: <GuiEdit.au3>)
  683. ; Author(s):            Gary Frost (custompcs at charter dot net)
  684. ; Note(s):                An undo operation can also be undone.
  685. ;                            For example, you can restore deleted text with the first _GUICtrlEditUndo,
  686. ;                            and remove the text again with a second _GUICtrlEditUndo as long as there
  687. ;                            is no intervening edit operation.
  688. ;
  689. ;===============================================================================
  690. Func _GUICtrlEditUndo($h_edit)
  691.    If IsHWnd($h_edit) Then
  692.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_edit, "int", $EM_UNDO, "int", 0, "int", 0)
  693.       Return $a_ret[0]
  694.    Else
  695.       Return GUICtrlSendMsg($h_edit, $EM_UNDO, 0, 0)
  696.    EndIf
  697. EndFunc   ;==>_GUICtrlEditUndo